package com.hua.designpattern.structural.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * 
 * @author joshua
 *
 *         <pre>
 *
 *JDK Proxy
 *
 *反射机制在生成类的过程中比较高效，而asm在生成类之后的相关执行过程中比较高效（可以通过将asm生成的类进行缓存，这样解决asm生成类过程低效问题）。
 *jdk动态代理的应用前提，必须是目标类基于统一的接口。如果没有上述前提，jdk动态代理不能应用。
 *由此可以看出，jdk动态代理有一定的局限性，cglib这种第三方类库实现的动态代理应用更加广泛，且在效率上更有优势。
 *
 *         </pre>
 *
 */

public class DynamicProxyInvocationHandler implements InvocationHandler {

	private Object target;

	public DynamicProxyInvocationHandler(Object target) {
		super();
		this.target = target;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		Object result = null;
		System.out.println("++JDK++add log:start invoke method " + method.getName() + args);
		result = method.invoke(target, args);
		System.out.println("--JDK--add log:end invoke method " + method.getName() + args);
		return result;
	}

}
